Street-level image segmentation

In this part, we are going to work on segmentating street-level images into different categories.

Inport the modules and mount Google Drive

Click to show code
# import fiona
# import shapely
# import pyproj
# import os, os.path
# from fiona.crs import from_epsg

# Load the Drive helper and mount
from google.colab import drive

# This will prompt for authorization.
drive.mount('/content/drive')
Mounted at /content/drive
Click to show code
import time
import numpy as np
import requests
from PIL import Image
from matplotlib import pyplot as plt
import io
import os, os.path

Semantic Segmentation

This is a notebook for running the benchmark semantic segmentation network from the the ADE20K MIT Scene Parsing Benchchmark.

The code for this notebook is available here https://github.com/CSAILVision/semantic-segmentation-pytorch/tree/master/notebooks

It can be run on Colab at this URL https://colab.research.google.com/github/CSAILVision/semantic-segmentation-pytorch/blob/master/notebooks/DemoSegmenter.ipynb

Environment Setup

First, download the code and pretrained models if we are on colab.

Click to show code
%%bash
# Colab-specific setup
!(stat -t /usr/local/lib/*/dist-packages/google/colab > /dev/null 2>&1) && exit
pip install yacs 2>&1 >> install.log
git init 2>&1 >> install.log
git remote add origin https://github.com/CSAILVision/semantic-segmentation-pytorch.git 2>> install.log
git pull origin master 2>&1 >> install.log
DOWNLOAD_ONLY=1 ./demo_test.sh 2>> install.log
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint: 
hint:   git config --global init.defaultBranch <name>
hint: 
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint: 
hint:   git branch -m <name>
From https://github.com/CSAILVision/semantic-segmentation-pytorch
 * branch            master     -> FETCH_HEAD
 * [new branch]      master     -> origin/master

Imports and utility functions

We need pytorch, numpy, and the code for the segmentation model. And some utilities for visualizing the data.

Click to show code
# System libs
import os, csv, torch, numpy, scipy.io, PIL.Image, torchvision.transforms
# Our libs
from mit_semseg.models import ModelBuilder, SegmentationModule
from mit_semseg.utils import colorEncode

colors = scipy.io.loadmat('data/color150.mat')['colors']
names = {}
with open('data/object150_info.csv') as f:
    reader = csv.reader(f)
    next(reader)
    for row in reader:
        names[int(row[0])] = row[5].split(";")[0]

def visualize_result(img, pred, index=None):
    # filter prediction class if requested
    if index is not None:
        pred = pred.copy()
        pred[pred != index] = -1
        print(f'{names[index+1]}:')

    # colorize prediction
    pred_color = colorEncode(pred, colors).astype(numpy.uint8)

    # aggregate images and save
    im_vis = numpy.concatenate((img, pred_color), axis=1)
    display(PIL.Image.fromarray(im_vis))

Loading the segmentation model

Here we load a pretrained segmentation model. Like any pytorch model, we can call it like a function, or examine the parameters in all the layers.

After loading, we put it on the GPU. And since we are doing inference, not training, we put the model in eval mode.

Click to show code
# Network Builders
net_encoder = ModelBuilder.build_encoder(
    arch='resnet50dilated',
    fc_dim=2048,
    weights='ckpt/ade20k-resnet50dilated-ppm_deepsup/encoder_epoch_20.pth')
net_decoder = ModelBuilder.build_decoder(
    arch='ppm_deepsup',
    fc_dim=2048,
    num_class=150,
    weights='ckpt/ade20k-resnet50dilated-ppm_deepsup/decoder_epoch_20.pth',
    use_softmax=True)

crit = torch.nn.NLLLoss(ignore_index=-1)
segmentation_module = SegmentationModule(net_encoder, net_decoder, crit)
segmentation_module.eval()
segmentation_module.cuda()
Click to show code
# Load and normalize one image as a singleton tensor batch
pil_to_tensor = torchvision.transforms.Compose([
    torchvision.transforms.ToTensor(),
    torchvision.transforms.Normalize(
        mean=[0.485, 0.456, 0.406], # These are RGB mean+std values
        std=[0.229, 0.224, 0.225])  # across a large photo dataset.
])
# pil_image = PIL.Image.open('ADE_val_00001519.jpg').convert('RGB')
# img_original = numpy.array(pil_image)
# img_data = pil_to_tensor(pil_image)
# singleton_batch = {'img_data': img_data[None].cuda()}
# output_size = img_data.shape[1:]

Load test data

Now we load and normalize a single test image. Here we use the commonplace convention of normalizing the image to a scale for which the RGB values of a large photo dataset would have zero mean and unit standard deviation. (These numbers come from the imagenet dataset.) With this normalization, the limiiting ranges of RGB values are within about (-2.2 to +2.7).

  • Building: 1
  • Sky: 2
  • road: 6
  • Tree: 4
  • Grass: 9
  • sidewalk: 11
Click to show code
!wget https://utilitiesfiles.s3.us-east-1.amazonaws.com/penn-class/ai-urban-sustainability/data/gsvimages.zip -O gsvimgs.zip
!unzip -q gsvimgs.zip -d 'gsvimgs/'
!rm gsvimgs.zip
--2025-12-07 20:36:13--  https://utilitiesfiles.s3.us-east-1.amazonaws.com/penn-class/ai-urban-sustainability/data/gsvimages.zip
Resolving utilitiesfiles.s3.us-east-1.amazonaws.com (utilitiesfiles.s3.us-east-1.amazonaws.com)... 52.216.9.222, 54.231.128.130, 16.15.187.211, ...
Connecting to utilitiesfiles.s3.us-east-1.amazonaws.com (utilitiesfiles.s3.us-east-1.amazonaws.com)|52.216.9.222|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 21495086 (20M) [application/zip]
Saving to: ‘gsvimgs.zip’

gsvimgs.zip         100%[===================>]  20.50M  7.24MB/s    in 2.8s    

2025-12-07 20:36:17 (7.24 MB/s) - ‘gsvimgs.zip’ saved [21495086/21495086]
Click to show code
from pathlib import Path
import pandas as pd
import os

# Root folder in your Google Drive
base_dir = Path('/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m')

# CSV that has image_file and image_path columns
csv_path = base_dir / "street_points_250m_with_images.csv"
meta = pd.read_csv(csv_path)

print("Loaded metadata rows:", len(meta))
print(meta.columns)

# Build absolute image path from the relative image_path in CSV
meta["abs_image_path"] = meta["image_path"].apply(lambda p: str(base_dir / p))

# Quick check: show first few paths
meta[["image_file", "image_path", "abs_image_path"]].head()
Loaded metadata rows: 178
Index(['city', 'street', 'segment_id', 'point_id', 'distance_m', 'lon', 'lat',
       'heading_road', 'heading_sidewalk_right', 'heading_sidewalk_left',
       'image_file', 'image_path', 'gsv_status', 'gsv_url_sidewalk'],
      dtype='object')
image_file image_path abs_image_path
0 idx0000_seg0_pt0_h189.jpg gsv_sidewalk_250m\idx0000_seg0_pt0_h189.jpg /content/drive/MyDrive/Colab_Notebooks/final/s...
1 idx0001_seg0_pt1_h189.jpg gsv_sidewalk_250m\idx0001_seg0_pt1_h189.jpg /content/drive/MyDrive/Colab_Notebooks/final/s...
2 idx0002_seg0_pt2_h189.jpg gsv_sidewalk_250m\idx0002_seg0_pt2_h189.jpg /content/drive/MyDrive/Colab_Notebooks/final/s...
3 idx0003_seg0_pt3_h189.jpg gsv_sidewalk_250m\idx0003_seg0_pt3_h189.jpg /content/drive/MyDrive/Colab_Notebooks/final/s...
4 idx0004_seg0_pt4_h189.jpg gsv_sidewalk_250m\idx0004_seg0_pt4_h189.jpg /content/drive/MyDrive/Colab_Notebooks/final/s...
Click to show code
# gsvdir = os.path.join(root, 'gsvimgs')
# gsvdir
from pathlib import Path

base_dir = Path('/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m')
gsvdir = base_dir / "gsv_sidewalk_250m"
files = os.listdir(gsvdir)

# Print total number of images
print("Number of image files:", len(files))

# Optional: print first few filenames to check
for f in files[:5]:
    print(f)
Number of image files: 178
idx0000_seg0_pt0_h189.jpg
idx0001_seg0_pt1_h189.jpg
idx0002_seg0_pt2_h189.jpg
idx0003_seg0_pt3_h189.jpg
idx0004_seg0_pt4_h189.jpg
Click to show code
from google.colab import drive
drive.mount('/content/drive')
Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount("/content/drive", force_remount=True).
Click to show code
import os
from pathlib import Path

base_dir = Path('/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m')
img_dir = base_dir / "gsv_sidewalk_250m"

# 从 image_path 里提取出纯文件名(兼容 Windows 的反斜杠)
meta["image_file"] = meta["image_path"].apply(
    lambda p: os.path.basename(str(p).replace("\\", "/"))
)

# 用真正的图片文件夹 + 文件名 拼出绝对路径
meta["abs_image_path"] = meta["image_file"].apply(
    lambda f: str(img_dir / f)
)

print(meta[["image_path", "image_file", "abs_image_path"]].head())
                                    image_path                 image_file  \
0  gsv_sidewalk_250m\idx0000_seg0_pt0_h189.jpg  idx0000_seg0_pt0_h189.jpg   
1  gsv_sidewalk_250m\idx0001_seg0_pt1_h189.jpg  idx0001_seg0_pt1_h189.jpg   
2  gsv_sidewalk_250m\idx0002_seg0_pt2_h189.jpg  idx0002_seg0_pt2_h189.jpg   
3  gsv_sidewalk_250m\idx0003_seg0_pt3_h189.jpg  idx0003_seg0_pt3_h189.jpg   
4  gsv_sidewalk_250m\idx0004_seg0_pt4_h189.jpg  idx0004_seg0_pt4_h189.jpg   

                                      abs_image_path  
0  /content/drive/MyDrive/Colab_Notebooks/final/s...  
1  /content/drive/MyDrive/Colab_Notebooks/final/s...  
2  /content/drive/MyDrive/Colab_Notebooks/final/s...  
3  /content/drive/MyDrive/Colab_Notebooks/final/s...  
4  /content/drive/MyDrive/Colab_Notebooks/final/s...  

Applying segmentation model to street-view images to obtain class masks and output

Click to show code
import os
import numpy as np
import PIL.Image

# 1. Initialize empty columns for segmentation fractions
meta["building_frac"] = np.nan
meta["sky_frac"]      = np.nan
meta["road_frac"]     = np.nan
meta["tree_frac"]     = np.nan
meta["grass_frac"]    = np.nan
meta["sidewalk_frac"] = np.nan

# 2. Columns to store processed (segmentation visualization) image info
meta["seg_vis_file"] = ""
meta["seg_vis_path"] = ""

# 3. Folder to save processed images (original + segmentation)
seg_vis_dir = base_dir / "gsv_sidewalk_250m_segvis"
seg_vis_dir.mkdir(exist_ok=True)

# 4. Loop over each row in the CSV
for idx, row in meta.iterrows():
    filename = row["abs_image_path"]
    print(filename)

    # Optional: test only a few images first
    # if idx > 5:
    #     break

    # --- load image ---
    pil_image = PIL.Image.open(filename).convert('RGB')
    img_original = np.array(pil_image)
    img_data = pil_to_tensor(pil_image)
    singleton_batch = {'img_data': img_data[None].cuda()}
    output_size = img_data.shape[1:]

    # --- run segmentation ---
    with torch.no_grad():
        scores = segmentation_module(singleton_batch, segSize=output_size)

    # predicted label per pixel (H, W), each in [0, 149]
    _, pred = torch.max(scores, dim=1)
    pred = pred.cpu()[0].numpy()

    # ---- compute pixel fractions for selected classes ----
    flat = pred.flatten()
    total_pixels = flat.size
    class_counts = np.bincount(flat, minlength=150)
    class_frac = class_counts / total_pixels

    # ADE20K class indices:
    # 1: building, 2: sky, 3: road, 4: tree, 9: grass, 11: sidewalk
    meta.loc[idx, "building_frac"] = float(class_frac[1])
    meta.loc[idx, "sky_frac"]      = float(class_frac[2])
    meta.loc[idx, "road_frac"]     = float(class_frac[6])
    meta.loc[idx, "tree_frac"]     = float(class_frac[4])
    meta.loc[idx, "grass_frac"]    = float(class_frac[9])
    meta.loc[idx, "sidewalk_frac"] = float(class_frac[11])

    # ---- create and save visualization image (original + segmentation) ----
    # colorEncode and colors come from the MIT ADE20K code you ran earlier
    pred_color = colorEncode(pred, colors).astype(np.uint8)
    im_vis = np.concatenate((img_original, pred_color), axis=1)

    # use image_file as base name if available
    if "image_file" in meta.columns and isinstance(row["image_file"], str):
        vis_name = f"seg_{row['image_file']}"
    else:
        vis_name = f"seg_idx{idx:04d}.jpg"

    vis_path = seg_vis_dir / vis_name
    PIL.Image.fromarray(im_vis).save(vis_path)

    # store processed image info (relative path is enough)
    meta.loc[idx, "seg_vis_file"] = vis_name
    meta.loc[idx, "seg_vis_path"] = str(vis_path)

    # ---- (optional) visualize in notebook for the first few images ----
    if idx < 3:
        visualize_result(img_original, pred)

print("Segmentation + saving finished for all rows.")

# 5. Save updated CSV with fractions and processed image paths
out_csv = base_dir / "street_points_250m_with_seg_features.csv"
meta.to_csv(out_csv, index=False)

print("Saved updated CSV to:")
print(" ", out_csv)
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0000_seg0_pt0_h189.jpg

/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0001_seg0_pt1_h189.jpg

/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0002_seg0_pt2_h189.jpg

/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0003_seg0_pt3_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0004_seg0_pt4_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0005_seg0_pt5_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0006_seg0_pt6_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0007_seg0_pt7_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0008_seg0_pt8_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0009_seg0_pt9_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0010_seg0_pt10_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0011_seg0_pt11_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0012_seg0_pt12_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0013_seg0_pt13_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0014_seg0_pt14_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0015_seg0_pt15_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0016_seg1_pt0_h10.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0017_seg1_pt1_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0018_seg1_pt2_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0019_seg1_pt3_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0020_seg1_pt4_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0021_seg1_pt5_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0022_seg1_pt6_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0023_seg1_pt7_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0024_seg1_pt8_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0025_seg1_pt9_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0026_seg1_pt10_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0027_seg1_pt11_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0028_seg1_pt12_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0029_seg1_pt13_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0030_seg1_pt14_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0031_seg1_pt15_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0032_seg2_pt0_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0033_seg2_pt1_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0034_seg2_pt2_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0035_seg2_pt3_h10.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0036_seg2_pt4_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0037_seg2_pt5_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0038_seg2_pt6_h10.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0039_seg2_pt7_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0040_seg2_pt8_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0041_seg2_pt9_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0042_seg2_pt10_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0043_seg2_pt11_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0044_seg2_pt12_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0045_seg2_pt13_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0046_seg2_pt14_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0047_seg2_pt15_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0048_seg2_pt16_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0049_seg2_pt17_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0050_seg2_pt18_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0051_seg2_pt19_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0052_seg2_pt20_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0053_seg2_pt21_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0054_seg3_pt0_h90.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0055_seg4_pt0_h90.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0056_seg5_pt0_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0057_seg5_pt1_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0058_seg5_pt2_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0059_seg5_pt3_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0060_seg5_pt4_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0061_seg5_pt5_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0062_seg6_pt0_h88.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0063_seg6_pt1_h8.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0064_seg6_pt2_h4.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0065_seg6_pt3_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0066_seg6_pt4_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0067_seg7_pt0_h190.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0068_seg7_pt1_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0069_seg7_pt2_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0070_seg7_pt3_h268.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0071_seg7_pt4_h279.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0072_seg7_pt5_h279.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0073_seg7_pt6_h279.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0074_seg7_pt7_h277.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0075_seg7_pt8_h276.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0076_seg7_pt9_h276.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0077_seg8_pt0_h186.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0078_seg8_pt1_h105.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0079_seg8_pt2_h105.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0080_seg0_pt0_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0081_seg0_pt1_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0082_seg0_pt2_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0083_seg0_pt3_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0084_seg0_pt4_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0085_seg0_pt5_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0086_seg0_pt6_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0087_seg0_pt7_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0088_seg0_pt8_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0089_seg0_pt9_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0090_seg0_pt10_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0091_seg0_pt11_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0092_seg0_pt12_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0093_seg0_pt13_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0094_seg0_pt14_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0095_seg0_pt15_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0096_seg0_pt16_h190.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0097_seg0_pt17_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0098_seg0_pt18_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0099_seg0_pt19_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0100_seg0_pt20_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0101_seg0_pt21_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0102_seg0_pt22_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0103_seg0_pt23_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0104_seg0_pt24_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0105_seg0_pt25_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0106_seg0_pt26_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0107_seg0_pt27_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0108_seg0_pt28_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0109_seg0_pt29_h190.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0110_seg0_pt30_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0111_seg0_pt31_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0112_seg0_pt32_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0113_seg0_pt33_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0114_seg0_pt34_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0115_seg0_pt35_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0116_seg0_pt36_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0117_seg0_pt37_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0118_seg0_pt38_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0119_seg0_pt39_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0120_seg0_pt40_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0121_seg0_pt41_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0122_seg0_pt42_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0123_seg0_pt43_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0124_seg0_pt44_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0125_seg0_pt45_h190.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0126_seg0_pt46_h190.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0127_seg0_pt47_h190.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0128_seg0_pt0_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0129_seg0_pt1_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0130_seg0_pt2_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0131_seg0_pt3_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0132_seg0_pt4_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0133_seg0_pt5_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0134_seg0_pt6_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0135_seg0_pt7_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0136_seg0_pt8_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0137_seg0_pt9_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0138_seg0_pt10_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0139_seg0_pt11_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0140_seg0_pt12_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0141_seg0_pt13_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0142_seg0_pt14_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0143_seg0_pt15_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0144_seg0_pt16_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0145_seg0_pt17_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0146_seg0_pt18_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0147_seg0_pt19_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0148_seg0_pt20_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0149_seg0_pt21_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0150_seg0_pt22_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0151_seg0_pt23_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0152_seg0_pt24_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0153_seg0_pt25_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0154_seg0_pt26_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0155_seg0_pt27_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0156_seg1_pt0_h90.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0157_seg2_pt0_h90.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0158_seg3_pt0_h10.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0159_seg3_pt1_h10.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0160_seg3_pt2_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0161_seg3_pt3_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0162_seg3_pt4_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0163_seg3_pt5_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0164_seg3_pt6_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0165_seg3_pt7_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0166_seg3_pt8_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0167_seg3_pt9_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0168_seg3_pt10_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0169_seg3_pt11_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0170_seg3_pt12_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0171_seg3_pt13_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0172_seg3_pt14_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0173_seg3_pt15_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0174_seg3_pt16_h10.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0175_seg3_pt17_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0176_seg3_pt18_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0177_seg3_pt19_h9.jpg
Segmentation + saving finished for all rows.
Saved updated CSV to:
  /content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/street_points_250m_with_seg_features.csv